#include "mainwindow.h"
#include <QApplication>
#include <QPluginLoader>
#include <QDebug>
#include <QDir>
#include <QFontDatabase>
#include <QDebug>
#include <QTextCodec>
#include <QScreen>
#include <QApplication>
#include <QImageReader>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
static bool loadFontFromFile(const QString &fontPath, QString &error);
static bool loadStyleSheet(const QString &stylesheetPath, QString &error);
// 添加检查和删除标记数据库的函数
static void checkAndDeleteMarkedDatabases();
int main(int argc, char *argv[])
{
    // 设置默认输入法为虚拟键盘
    qputenv("QT_IM_MODULE", QByteArray("Qt5Input"));
    QApplication a(argc, argv); // 启用控件动画-美观
    QApplication::setEffectEnabled(Qt::UI_AnimateCombo, true);
    QApplication::setEffectEnabled(Qt::UI_FadeMenu, true);

    QString appDir = QCoreApplication::applicationDirPath(); /*获取当前可执行程序所在路径*/
    // 设置中文编码
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    // 在程序启动时检查并删除标记的数据库文件
    checkAndDeleteMarkedDatabases();
    QString error1;
    /*1.加载开源免费鸿蒙字体库-sc更适合简体*/
    QString fontsPath = QDir(appDir).filePath("fonts/HarmonyOS_Sans_SC/HarmonyOS_SansSC_Regular.ttf");
    loadFontFromFile(fontsPath, error1);

    /*1.加载全局样式-qt widget存在太多bug，插件机制下不是很支持，所以不再使用这种方式*/
    QString error2;
    QString stylePath = QDir(appDir).filePath("stylesheet/stylesheet.qss");
    loadStyleSheet(stylePath, error2);

    MainWindow w;
    return a.exec();
}
static void checkAndDeleteMarkedDatabases()
{
    QFile flagFile("delete_database.flag");
    if (flagFile.exists())
    {
        // 读取标记文件内容
        QString content;
        if (flagFile.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            content = flagFile.readAll();
            flagFile.close();
        }

        qDebug() << "发现数据库删除标记文件，内容：" << content;

        // 删除数据库文件
        QStringList dbFiles;
        dbFiles << "warning.db" << "sqliteTemp_test.db";

        bool allDeleted = true;
        QString errorMsg;

        for (const QString &fileName : dbFiles)
        {
            QFile dbFile(fileName);
            if (dbFile.exists())
            {
                if (!dbFile.remove())
                {
                    allDeleted = false;
                    errorMsg += QString("无法删除文件: %1 (错误: %2)\n")
                                    .arg(fileName)
                                    .arg(dbFile.errorString());
                }
                else
                {
                    qDebug() << "成功删除数据库文件:" << fileName;
                }
            }
        }

        // 删除标记文件本身
        if (flagFile.remove())
        {
            qDebug() << "成功删除标记文件";
        }

        if (allDeleted)
        {
            qDebug() << "Database files deleted successfully on startup";
        }
        else
        {
            qDebug() << "Database deletion completed with errors:" << errorMsg;
        }
    }
}
/**
 * @brief loadFontFromFile 从指定路径加载文件字体，必须将字体库放到对应的文件夹下
 * @param fontPath
 * @return
 */
static bool loadFontFromFile(const QString &fontPath, QString &error)
{
    int fontId = QFontDatabase::addApplicationFont(fontPath);
    if (fontId == -1)
    {
        error = QString("Failed to load font from file: %1").arg(fontPath);
        return false;
    }

    QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
    if (fontFamilies.isEmpty())
    {
        error = QString("No font families found in: %1").arg(fontPath);
        return false;
    }

    QString fontFamily = fontFamilies.at(0);
    QFont font(fontFamily, 6); // 设置字体大小
    qApp->setFont(font);       // 全局应用，或单独给某个控件使用
    error = QString("Font loaded successfully: %1").arg(fontFamily);
    return true;
}
/**
 * @brief loadStyleSheet 加载样式
 * @param stylesheetPath
 * @return
 */
static bool loadStyleSheet(const QString &stylesheetPath, QString &error)
{
    bool ret = false;
    // 加载样式表文件
    QFile file(stylesheetPath); // 使用资源文件路径或实际文件路径
    if (!file.exists())
    {
        error = QString("Stylesheet file not found!");
    }
    else
    {
        if (file.open(QFile::ReadOnly | QFile::Text))
        {
            QTextStream stream(&file);
            stream.setCodec("UTF-8"); // 设置编码为UTF-8
            QString stylesheet = stream.readAll();
            qApp->setStyleSheet(stylesheet); // 应用全局样式
            file.close();
            error = QString("load stylesheet file: %1 success").arg(stylesheetPath);
            ret = true;
        }
        else
        {
            error = QString("Failed to open stylesheet file: %1").arg(file.errorString());
        }
    }
    return ret;
}
